package cn.com.baiwei.controller;

import cn.com.baiwei.service.impl.MonthlyIncomePurchaseProfitServiceImpl;
import io.swagger.annotations.*;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Calendar;
import java.util.Map;

/**
 * (MonthlyIncomePurchaseProfit)表控制层
 *
 * @author yangqing
 * @since 2021-09-18 15:31:44
 * @version 1.0
 */
 @Component
@RestController
@RequestMapping("/monthlyIncomePurchaseProfit")
@Api(value = "(MonthlyIncomePurchaseProfit)管理",tags = "每月流水（收入、支出、利润）管理接口API")
@ApiResponses({
        @ApiResponse(code=400,message="请求参数不完整或者错误"),
        @ApiResponse(code=404,message="找不到页面"),
        @ApiResponse(code=405,message="请求方式不正确，比如后台接收是post，但前端请求的是get"),
        @ApiResponse(code=406,message="页面地址和接口名冲突"),
        @ApiResponse(code=415,message="请求格式不正确，前端可能没有把请求头修改为json，也可能前端请求的json对象没有转换为字符串"),
        @ApiResponse(code=500,message="后台服务逻辑错误")
})
public class MonthlyIncomePurchaseProfitController {
    /**
     * 服务对象
     */
    @Resource
    private MonthlyIncomePurchaseProfitServiceImpl monthlyIncomePurchaseProfitServiceImpl;

    /**
     * 通过主键查询单条数据
     * @param index  需要查询的页码
     * @param name   模糊查询的内容
     * @param limit  分页数量
     * @return 单条数据
     */
    @RequestMapping(value = "/selectForPage", method = RequestMethod.GET)
    @ApiOperation(value = "列表查询分页接口",notes = "列表查询分页接口",httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "page",value = "页码",paramType = "query",dataType = "int",required = true,example="1"),
            @ApiImplicitParam(name = "name",value = "(MonthlyIncomePurchaseProfit)名称",paramType = "query",dataType = "String",required = false),
            @ApiImplicitParam(name = "limit",value = "分页数量",paramType = "query",dataType = "int",required = true,example="10")
    })
    public Map<String, Object> selectForPage(@RequestParam(name = "page") int index,@RequestParam(name = "limit") int limit, String name) {
        return this.monthlyIncomePurchaseProfitServiceImpl.selectForPage(index, limit, name);
    }
    
    /**
     * 查询所有数据
     * @return 返回所有数据
     */
    @RequestMapping(value = "/selectAll", method = RequestMethod.GET)
    @ApiOperation(value = "查询所有数据接口",notes = "查询所有数据接口",httpMethod = "GET")
    public Map<String, Object> selectAll() {
        return this.monthlyIncomePurchaseProfitServiceImpl.selectAll();
    }

//    /**
//     * 通过主键删除单条数据
//     *
//     * @param id 主键
//     * @return 单条数据
//     */
//    @RequestMapping(value = "/deleteById", method = RequestMethod.POST)
//    @ApiOperation(value = "根据一个主键删除一条(MonthlyIncomePurchaseProfit记录的接口",notes = "根据一个主键删除一条(MonthlyIncomePurchaseProfit记录的接口",httpMethod = "POST")
//    @ApiImplicitParams({
//            @ApiImplicitParam(name = "id",value = "主键",paramType = "query",dataType = "String",required = true),
//    })
//    public Map<String, Object> deleteById(@RequestParam("id") String id) {
//        return this.monthlyIncomePurchaseProfitServiceImpl.deleteById(id);
//    }

    /**
     * 通过yearMonth查询单条数据
     *
     *
     * @param yearMonth 年月
     * @return 实例对象
     */
    @RequestMapping(value = "/selectByYearMonth", method = RequestMethod.GET)
    @ApiOperation(value = "通过yearMonth查询一个月数据的接口",notes = "通过yearMonth查询一个月数据的接口",httpMethod = "GET")
    public Map<String, Object> selectByMonthlyDate(String yearMonth)  {
        return this.monthlyIncomePurchaseProfitServiceImpl.selectByYearMonth(yearMonth);
    }
    
//    /**
//     * 通过主键更新单条数据
//     *
//     * @param monthlyIncomePurchaseProfit 一个数据库对应的POJO数据对象
//     * @return 单条数据
//     */
//    @RequestMapping(value = "/updateById", method = RequestMethod.POST)
//    @ApiOperation(value = "通过主键更新一个(MonthlyIncomePurchaseProfit的接口",notes = "通过主键更新一个(MonthlyIncomePurchaseProfit的接口",httpMethod = "POST")
//    public Map<String, Object> updateById(@RequestBody @ApiParam(name = "monthlyIncomePurchaseProfit",value = "pojo模型",required = true) MonthlyIncomePurchaseProfit monthlyIncomePurchaseProfit) {
//        return this.monthlyIncomePurchaseProfitServiceImpl.updateById(monthlyIncomePurchaseProfit);
//    }
    
    /**
     * 新增单条数据
     *
     *
     */
   @Scheduled(cron = "0 59 23 28-31 * ?") //每月最后一日的晚上23点59分触发
//    @Scheduled(cron = "0 * 20 * * ?")// "0 * 20 * * ?"每天晚上8点到9点一分钟执行一次
    @RequestMapping(value = "/insert", method = RequestMethod.POST)
    @ApiOperation(value = "通过Scheduled注解自动新增数据接口",notes = "通过Scheduled注解自动新增数据接口",httpMethod = "GET")
    public void insert() {
       final Calendar c = Calendar.getInstance();
       if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) { //判断当天是不是本月的最后一天
           this.monthlyIncomePurchaseProfitServiceImpl.insert();
       }
   }
    /**
     * 通过开始结束时间查询多个数据
     *
     * @param startYearMonth 开始时间
     * @param endYearMonth 结束时间
     * @return 实例对象
     */
    @RequestMapping(value = "/selectSomeYearMonths", method = RequestMethod.GET)
    @ApiOperation(value = "通过startYearMonth和endYearMonth查询一个数据的接口",notes = "通过一段开始结束日期查询一个数据的接口",httpMethod = "GET")
    public Map<String, Object> selectSomeMonths(String startYearMonth,String endYearMonth) {
        return this.monthlyIncomePurchaseProfitServiceImpl.selectSomeYearMonths(startYearMonth,endYearMonth);
    }

}
